package com.example.redis.controller;

import com.example.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @Author: lzq
 * @Description:
 */
@Slf4j
@RestController
public class RedisController {
    @Resource
    RedisTemplate<String, Object> redisTemplate;
    User user = new User();
    @GetMapping("/add")
    public String add(){
        //添加数据
        User.Student student = new User.Student();
        user.setId(1);
        user.setDate(LocalDate.now());
        user.setDateTime(LocalDateTime.now());
        student.setDate(LocalDate.now());
        student.setDateTime(LocalDateTime.now());
        student.setName("张三");
        user.setStudent(student);
        if (redisTemplate.opsForValue().get("张三")==null){
            //判断缓存中是否存在如果没有则加入缓存
            redisTemplate.opsForValue().set("张三",user);
            log.info("加入缓存");
        }
        return  redisTemplate.opsForValue().get("张三").toString();
    }

    @GetMapping("/get")
    public String get(){
        //首先从缓存中获取数据
        if (redisTemplate.opsForValue().get("张三")!=null){
            log.info("从缓存中拿数据");
            return  redisTemplate.opsForValue().get("张三").toString();
        }else {
            //没有则从数据库获取数据
            if (1==user.getId()){
                 //然后加入缓存
                redisTemplate.opsForValue().set("张三",user);
                log.info("加入缓存");
            }
            return redisTemplate.opsForValue().get("张三").toString();
        }
    }

    @GetMapping("/update")
    public String update(){
            //获取数据
            if (null!=user.getId()&&1==user.getId()){
                //修改数据
                user.getStudent().setName("update张三");
                //加入缓存
                redisTemplate.opsForValue().set("张三",user);
                log.info("加入缓存");
            }
            return redisTemplate.opsForValue().get("张三").toString();
        }
    @GetMapping("/delete")
    public String delete(){
        //获取数据

        if (null!=user.getId()&&1==user.getId()){
            //删除数据
            user=null;
            //删除缓存
            redisTemplate.delete("张三");
            log.info("删除缓存");
        }
        return "删除成功";
    }

}
